var ANDROID = 1;
var IOS = 2;
var curApp = "";
var ua = window.navigator.userAgent.toLowerCase();
if (/android/.test(ua)) {
  curApp = ANDROID;
} else if (/(iphone|ipad|ipod|ios)/.test(ua)) {
  curApp = IOS;
} else {
  document.write("curApp =>  其他类型 => " + ua);
}
if (curApp === ANDROID) {
  var bridge = {
    //default:this,
    call: function (b, a, c) {
      var e = "";
      "function" == typeof a && ((c = a), (a = {}));
      a = {
        data: void 0 === a ? null : a,
      };
      if ("function" == typeof c) {
        var g = "dscb" + window.dscb++;
        window[g] = c;
        a._dscbstub = g;
      }
      a = JSON.stringify(a);
      if (window._dsbridge) e = _dsbridge.call(b, a);
      else if (window._dswk || -1 != navigator.userAgent.indexOf("_dsbridge"))
        e = prompt("_dsbridge=" + b, a);
      return JSON.parse(e || "{}").data;
    },
    register: function (b, a, c) {
      c = c ? window._dsaf : window._dsf;
      window._dsInit ||
        ((window._dsInit = !0),
        setTimeout(function () {
          bridge.call("_dsb.dsinit");
        }, 0));
      "object" == typeof a ? (c._obs[b] = a) : (c[b] = a);
    },
    registerAsyn: function (b, a) {
      this.register(b, a, !0);
    },
    hasNativeMethod: function (b, a) {
      return this.call("_dsb.hasNativeMethod", {
        name: b,
        type: a || "all",
      });
    },
    disableJavascriptDialogBlock: function (b) {
      this.call("_dsb.disableJavascriptDialogBlock", {
        disable: !1 !== b,
      });
    },
  };
  !(function () {
    //!function "执行"
    if (!window._dsf) {
      var b = {
          _dsf: {
            _obs: {},
          },
          _dsaf: {
            _obs: {},
          },
          dscb: 0,
          dsBridge: bridge,
          close: function () {
            bridge.call("_dsb.closePage");
          },
          _handleMessageFromNative: function (a) {
            var e = JSON.parse(a.data),
              b = {
                id: a.callbackId,
                complete: !0,
              },
              c = this._dsf[a.method],
              d = this._dsaf[a.method],
              h = function (a, c) {
                b.data = a.apply(c, e);
                bridge.call("_dsb.returnValue", b);
              },
              k = function (a, c) {
                e.push(function (a, c) {
                  b.data = a;
                  b.complete = !1 !== c;
                  bridge.call("_dsb.returnValue", b);
                });
                a.apply(c, e);
              };
            if (c) h(c, this._dsf);
            else if (d) k(d, this._dsaf);
            else if (((c = a.method.split(".")), !(2 > c.length))) {
              a = c.pop();
              var c = c.join("."),
                d = this._dsf._obs,
                d = d[c] || {},
                f = d[a];
              f && "function" == typeof f
                ? h(f, d)
                : ((d = this._dsaf._obs),
                  (d = d[c] || {}),
                  (f = d[a]) && "function" == typeof f && k(f, d));
            }
          },
        },
        a;
      for (a in b) window[a] = b[a];
      bridge.register("_hasJavascriptMethod", function (a, b) {
        b = a.split(".");
        if (2 > b.length) return !(!_dsf[b] && !_dsaf[b]);
        a = b.pop();
        b = b.join(".");
        return (b = _dsf._obs[b] || _dsaf._obs[b]) && !!b[a];
      });
    }
  })();
} else if (curApp == IOS) {
  var jsBridge = function (bridgeName, bridgeScheme) {
    this.bridgeName = bridgeName || "WebViewJavascriptBridge";
    this.bridgeScheme = bridgeScheme || "https";
    var ua = navigator.userAgent || navigator.vendor || window.opera;
    var ANDROID = 1;
    var IOS = 2;
    var SUCCESS_CODE = 0;
    ua = ua.toLowerCase();
    if (/android/.test(ua)) {
      this.app = ANDROID;
    } else if (/(iphone|ipad|ipod|ios)/.test(ua)) {
      this.app = IOS;
    }

    /* 获取 bridge */
    this.getBridge = function (callback) {
      if (window[this.bridgeName]) {
        callback(window[this.bridgeName]);
        return;
      }
      if (this.app === ANDROID) {
        document.addEventListener(
          "WebViewJavascriptBridgeReady",
          function () {
            callback(window[this.bridgeName]);
          },
          false
        );
      } else if (this.app === IOS) {
        // WebViewJavascriptBridge 由native在注入
        // https://github.com/marcuswestin/WebViewJavascriptBridge
        if (window.WVJBCallbacks) {
          return window.WVJBCallbacks.push(callback);
        }
        window.WVJBCallbacks = [callback];
        var WVJBIframe = document.createElement("iframe");
        WVJBIframe.style.display = "none";
        WVJBIframe.src = "https://__bridge_loaded__";
        document.documentElement.appendChild(WVJBIframe);
        setTimeout(function () {
          document.documentElement.removeChild(WVJBIframe);
        }, 0);
      }
    };
    /**
     * 给ios和android注册事件监听
     *
     * @memberof jsBridge
     */
    this.on = function (event, jsHandler) {
      this.registHandler(event, jsHandler);
    };

    /**
     * 默认监听事件
     *
     * @memberof jsBridge
     */
    this.registDefaultHandlerForApp = function () {
      this.on("reload", function () {
        location.reload();
      });
    };

    /**
     * 注册事件逻辑
     *
     * @memberof jsBridge
     */
    this.registHandler = function (event, jsHandler) {
      this.getBridge(function (bridge) {
        if (
          bridge &&
          bridge.registerHandler &&
          typeof bridge.registerHandler === "function"
        ) {
          bridge.registerHandler(event, function (data2js, responseCallback) {
            responseCallback = responseCallback || function () {};
            jsHandler(data2js, responseCallback);
          });
        }
      });
    };
    /**
     * 调用 app
     * @param {string} event
     * @param {object} params
     * @param {fun} callback
     * @return JSON对象
     */
    this.callHandler = function (event, params, callback) {
      this.getBridge(function (bridge) {
        if (
          bridge &&
          bridge.registerHandler &&
          typeof bridge.registerHandler === "function"
        ) {
          bridge.callHandler(event, params, callback);
        }
      });
    };
    this.registDefaultHandlerForApp();

    return this;
  };
}

if (!jsBridge) {
  jsBridge = function () {};
}
jsBridge.prototype.curApp = curApp;
/**
 * 扫码
 */
jsBridge.prototype.scanQRCode = function (params, success) {
  if (this.curApp == ANDROID) {
    dsBridge.call("scanQRCode", params, success);
  } else if (this.curApp == IOS) {
    this.callHandler("scanQRCode", params, success);
  }
};
/**
 * 获取BTY地址
 */
jsBridge.prototype.getCurrentBTYAddress = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("getCurrentBTYAddress", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("getCurrentBTYAddress", params, success);
    }
};
/**
 *  获取所有币种的地址：getAddress
 *  入参：cointype为BTC,ETH,TRX,BTY等主链
 */
jsBridge.prototype.getAddress = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("getAddress", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("getAddress", params, success);
    }
};
/**
 * 设置标题
 */
jsBridge.prototype.setTitle = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("setTitle", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("setTitle", params, success);
    }
};
/**
 * 获取当前语言
 */
jsBridge.prototype.getLang = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("getLang", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("getLang", params, success);
    }
};
/**
 * 返回上一个网页
 */
jsBridge.prototype.closeCurrentWebview = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("closeCurrentWebview", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("closeCurrentWebview", params, success);
    }
};
/**
 *  获取设备id：getDeviceId
 */
jsBridge.prototype.getDeviceId = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("getDeviceId", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("getDeviceId", params, success);
    }
};
/**
 *  跳转钱包 gotoWallet
 */
jsBridge.prototype.gotoWallet = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("gotoWallet", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("gotoWallet", params, success);
    }
};
/**
 * 微信分享
 */
jsBridge.prototype.wechatShare = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("wechatShare", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("wechatShare", params, success);
    }
};
/**
 * 构造数据：create
 */
jsBridge.prototype.create = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("create", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("create", params, success);
    }
};
/**
 *  普通签名：sign
 */
jsBridge.prototype.sign = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("sign", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("sign", params, success);
    }
};
/**
 *  交易组签名：signTxGroup
 *  入参：交易组只支持BTY
 */
jsBridge.prototype.signTxGroup = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("signTxGroup", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("signTxGroup", params, success);
    }
};
/**
 *  发送交易：send
 *  cointype为BTC,ETH,TRX,BTY等主链
 */
jsBridge.prototype.send = function (params, success) {
    if (this.curApp == ANDROID) {
        dsBridge.call("send", params, success);
    } else if (this.curApp == IOS) {
        this.callHandler("send", params, success);
    }
};
//=====================================================================================
//==================================增加新的应用方法====================================
//=====================================================================================
if (/wallet/.test(ua)) {
  console.log("在钱包环境");
} else {
  console.log("不是在钱包环境");
}

//export default new jsBridge();
var jsBridge = new jsBridge();
